class Animal {

    private _love;

    // public name: string;
    constructor(name: string) {
        this.name = name;
    }

    sayHi() {
        return `My name is ${this.name}`
    }

    get name() {
        return 'Kitty'
    }

    set name(name: string) {
        console.log('setter: ', name)
    }

    // 静态方法
    static sayHello() {
        console.log('Hello Ts')
    }
}

let a = new Animal('Jack')
// 非静态方法，通过类的实例来调用
console.log(a.sayHi())

a.name = 'Tom'
console.log(a.name)

// 静态方法使用时，通过类来调用
Animal.sayHello()


/**
 * 一般使用 _ 来表示私有属性,然后在 getter setter 中进行操作，
 * 好处是 不需要修改原来的代码，就可以对属性进行内部额外操作
 */
class Person {
    constructor(private _name: string) {
    }

    get name(): string {
        return this._name + '加密处理'
    }

    set name(name: string) {
        this._name = name
    }
}
